
// 射线法-边界检测-只能检测凸边形（检测点在不在多边形里面）
function inRange(x, y, points) {
  // points表示多边形的顶点集合
  let inside = false
  for (let i = 0, j = points.length - 1; i < points.length; j = i++) {
    const xi = points[i][0]
    const yi = points[i][1]
    const xj = points[j][0]
    const yj = points[j][1]
    const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)
    if (intersect) { inside = !inside }
  }
  return inside
}

/**
 * 矩形边界检测-中心点判断法
 * @param {*} frameRect
 * @param {*} itemRect
 */
export function checkByPointInRect(frameRect, itemRect) {
  const x = itemRect.x + itemRect.width / 2
  const y = itemRect.y + itemRect.height / 2
  if (x > frameRect.x && y > frameRect.y && x < (frameRect.x + frameRect.width) && y < (frameRect.y + frameRect.height)) { return true } else { return false }
}

/**
 * 矩形边界检测-碰撞检测法
 * 两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一，同时y方向的距离的绝对值小于等于矩形高度和的二分之一
 * @param {*} frameRect
 * @param {*} itemRect
 */
export function checkByRectCollisionDetection(frameRect, itemRect) {
  const x1 = frameRect.x + frameRect.width / 2
  const y1 = frameRect.y + frameRect.height / 2
  const w1 = frameRect.width
  const h1 = frameRect.height
  const x2 = itemRect.x + itemRect.width / 2
  const y2 = itemRect.y + itemRect.height / 2
  const w2 = itemRect.width
  const h2 = itemRect.height
  if (Math.abs(x1 - x2) < ((w1 + w2) / 2) && Math.abs(y1 - y2) < ((h1 + h2) / 2)) { return true } else { return false }
}
